﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Financial_Assistant
{
    /// <summary>
    /// Логика взаимодействия для Сonfirmation.xaml
    /// </summary>
    
    public enum ActionType // перечисление типов действий, которые запрашивают подтверждение
    {
        Change, Delete, Entry
    }

    public partial class Confirmation : Window
    {
        private string user_ID = String.Empty;
        private string user_password = String.Empty;
        private string user_name = String.Empty;
        private ActionType action = ActionType.Change;

        private string _connectionString =
                @"Data Source = CHRISTINABEIM\SQLEXPRESS; Initial Catalog=Financial_Assistant; Trusted_Connection=True;"; //( ip-сервера, имя БД, разрешение соединения)

        public Confirmation(ActionType _action, string userID, string password, string userName)
        {
            InitializeComponent();
            user_ID = userID;
            user_name = userName;
            user_password = password;
            action = _action;
            NameLabel.Content = "Имя " + userName.ToString();
            Owner = App.Current.MainWindow;
        }

        private void OKBut_Click(object sender, RoutedEventArgs e)
        {
            if (action == ActionType.Change)
            {
                    if (PassworBox.Password == user_password)
                    {
                        ChangingUsersWindow userCard = new ChangingUsersWindow(user_name, user_ID);
                        userCard.ShowDialog();
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Пароли не совпадают");
                    }
            }
            else if (action == ActionType.Delete)
            {
                if (PassworBox.Password == user_password)
                {
                    //запросить подтверждение удаления
                    string question = "Вы действительно хотите удалить пользователя " + user_name + "? Восстановить данные будет невозможно!\n" ;
                    MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

                    if (resultBox == MessageBoxResult.Yes)
                    {
                        //пользователь подтведил удаление
                        try
                        {
                            SqlConnection connection = new SqlConnection(_connectionString);
                            StringBuilder query = new StringBuilder();

                            query.Append("DELETE [Имена входа] FROM [Имена входа] where [ID пользователя] = '");
                            query.Append(user_ID + "'");
                                        
                            connection.Open(); // открыть считывание
                            SqlCommand command = new SqlCommand(query.ToString(), connection);
                            SqlDataReader reader = command.ExecuteReader();
                            connection.Close();
                            reader.Dispose();
                            command.Dispose();
                            MessageBox.Show("Пользователь удален");
                            this.Close();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                        }
                        this.Close();
                    }
                }
                else
                {
                    MessageBox.Show("Пароли не совпадают");
                }
            }
            else if (action == ActionType.Entry)
            {
                if (PassworBox.Password == user_password)
                {
                    //открыть программу
                    ProgramWindow program = new ProgramWindow(user_ID);
                    //Window parent = this.Owner;
                    this.Owner.Close();
                    program.ShowDialog();
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Пароли не совпадают");
                }
            }
        }

        private void CancelBut_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void ForgetBut_Click(object sender, RoutedEventArgs e)
        {
            string questions = String.Empty;
            string answer = String.Empty;
            //ПРОВЕРКА ЗАДАН ЛИ ВООБЩЕ ВОПРОС

            try //пытаемся получить вопрос и ответ
            {
                
                SqlConnection connection = new SqlConnection(_connectionString);
                StringBuilder query = new StringBuilder();

                query.Append("SELECT [Контрольный вопрос], Ответ FROM [Имена Входа] where [ID пользователя] = '");
                query.Append(user_ID + "'");

                connection.Open(); // открыть считывание
                SqlCommand command = new SqlCommand(query.ToString(), connection);
                SqlDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    questions = reader[0].ToString();
                    answer = reader[1].ToString();
                }
                connection.Close();
                reader.Dispose();
                command.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
            }

            if (questions != String.Empty)
            {
                RememberWindow rememberWin = new RememberWindow(questions, answer, user_password);
                rememberWin.ShowDialog();
            }
            else MessageBox.Show(this, "Контрольный вопрос не был задан! Напоминание пароля невозможно");

        }
    }
}
